package com.tan.user.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.tan.common.domain.user.SysRole;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tan.common.dto.user.RoleCreateDto;
import com.tan.common.dto.user.RoleMenuDTO;
import com.tan.common.dto.user.RoleUpdateDto;
import com.tan.common.query.user.RoleQuery;
import com.tan.common.vo.user.RoleVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>
 * 角色表 服务类
 * </p>
 *
 * @author Tan
 * @since 2025-01-27
 */
public interface ISysRoleService extends IService<SysRole> {

    /**
     * @param [query]
     * @author Tan-Bowen
     * @description 角色分页
     * @date 2025/2/17 15:00
     */
    IPage<RoleVO> rolePages(RoleQuery query);

    /**
     * @param []
     * @author Tan-Bowen
     * @description 角色列表
     * @date 2025/2/21 11:34
     */
    List<RoleVO> roles();

    /**
     * @param [roleCreateDto]
     * @author Tan-Bowen
     * @description 创建
     * @date 2025/2/17 15:19
     */
    void createRole(RoleCreateDto roleCreateDto);

    /**
     * @param [roleUpdateDto]
     * @author Tan-Bowen
     * @description 修改
     * @date 2025/2/17 15:19
     */
    void updateRole(RoleUpdateDto roleUpdateDto);

    /**
     * @param [roleId]
     * @author Tan-Bowen
     * @description 删除角色
     * @date 2025/2/20 15:09
     */
    void delRole(Long roleId);

    /**
     * @param [userId]
     * @author Tan-Bowen
     * @description 用户的角色
     * @date 2025/2/17 16:40
     */
    List<RoleVO> userRoles(Long userId);

    /**
     * @param [roleMenuDTO]
     * @author Tan-Bowen
     * @description 分配菜单
     * @date 2025/2/20 16:01
     */
    void allocationMenu(RoleMenuDTO roleMenuDTO);

    /**
     * @param [roleId]
     * @author Tan-Bowen
     * @description 清除角色相关缓存
     * @date 2025/2/20 15:00
     */
    void clearRoleCache(Long roleId);

    /**
     * @param [ids]
     * @author Tan-Bowen
     * @description 批量清除角色相关缓存
     * @date 2025/2/20 15:31
     */
    void clearRoleCache(List<Long> ids);

    /**
     * @param [userId]
     * @author Tan-Bowen
     * @description 清除用户角色、用户路由 缓存； 角色修改，删除，分配权限
     * @date 2025/2/20 15:01
     */
    void clearUserRole(Long userId);
}
